Давайте попробуем реализовать поддержку MAPI без всяких волшебников, а вручную. Для этого создадим приложение AppWizard на базе диалогового окна и поместим кнопку, к которой и припишем код инициализации MAPI.
В первую очередь нам нужно поместить заголовочный файл с описанием функций MAPI.
// TestMapiDlg.cpp : implementation file // ......... #include "mapix.h" .........
Вот теперь надо подключить библиотеку с самим функциями в Project Setting и имя ее Mapi32.lib, ну все можно писать код.
void CTestMapiDlg::OnButton1()
{
HRESULT hR = MAPIInitialize(NULL);
ASSERT(S_OK == hR);
LPMAPISESSION pS = NULL;
hR = MAPILogonEx(0,NULL,NULL,MAPI_LOGON_UI |
MAPI_ALLOW_OTHERS | MAPI_EXTENDED,&pS);
if (S_OK == hR) AfxMessageBox("Ok !");
else AfxMessageBox("Bad !");
MAPIUninitialize();
}
Смотрим чего там написано. Первая функция MAPIInitialize производит инициализацию данных в системных модулях DLL. Сама функция вот такая.
HRESULT MAPIInitialize ( LPVOID lpMapiInit );
Но вместо структуры lpMapiInit можно передать NULL, что и делается. Если все нормально, то функция вернет S_OK. Следующим вызовом является MAPILogonEx. Эта функция регистрации клиента для работы с MAPI.
HRESULT MAPILogonEx ( ULONG ulUIParam, LPTSTR lpszProfileName, LPTSTR lpszPassword, FLAGS flFlags, LPMAPISESSION FAR * lppSession );
И последняя функция - это деинициализация клиента MAPIUninitialize, эта функция обратная MAPIInitialize и количество вызовов той и другой должно совпадать.
void MAPIUninitialize()